#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>

int insert(MYSQL mysql);
int delete(MYSQL mysql);
int update(MYSQL mysql);
int find(MYSQL mysql);


int main()
{
    MYSQL mysql;
    //初始化客户端库
    mysql_init(&mysql);
    
    //连接  MySQL 服务器
    if (!mysql_real_connect(&mysql,"localhost","itchenchong","wzj991010","stuff",0,NULL,0))
    {
        fprintf(stderr, "Failed to connect to database: Error: %s\n",
            mysql_error(&mysql));
            return 1;
    }
    while (1)
    {
        int m;
        printf("1、添加物资\n");
        printf("2、删除物资\n");
        printf("3、修改物资\n");
        printf("4、查看全部物资\n");
        printf("5、退出\n");
        scanf("%d",&m);
        if(m == 1)
        {
            insert(mysql);
        }
        else if(m == 2)
        {
            delete(mysql);
        }
        else if(m == 3)
        {
            update(mysql);
        }
        else if(m == 4)
        {
            find(mysql);
        }
        else if(m == 5)
        {
            break;
        }
    }
    mysql_close(&mysql);
    return 0;
}

int find(MYSQL mysql)
{
    char sql[300];
    sprintf(sql,"select * from stuff");
    
    if(mysql_query(&mysql, sql))
    {
        fprintf(stderr,"查看物资失败(原因：%s)\n",mysql_error(&mysql));
    }
    else
    {
        //查询成功
        MYSQL_RES *result;
        MYSQL_ROW row;
        // 获取查询结果集
        result = mysql_store_result(&mysql);

        if(result != NULL)
        {
            while(row = mysql_fetch_row(result))
            {
                printf("%s %s %s\n", row[0], row[1], row[2]);
            }
        
            // 释放查询结果集
            mysql_free_result(result);
        }
    }
}

int insert(MYSQL mysql)
{
    //执行SQL语句
    unsigned int id,num;
    char *str_id,str_num;
    char name[20];
    char sql[300];
    printf("请输入物资的id:");
    scanf("%d",&id);
    printf("请输入物资的名称:");
    scanf("%s",name);
    printf("请输入物资的数量：");
    scanf("%d",&num);
    
    sprintf(sql,"insert into stuff values(%d,\'%s\',%d)",id,name,num);
    
    if(mysql_query(&mysql, sql))
    {
        fprintf(stderr,"添加物资失败(原因：%s)\n",mysql_error(&mysql));
    }
    else
    {
        uint64_t r = mysql_affected_rows(&mysql); // 显示多少行发生改变
        printf("添加物资成功，共添加 %lu 种物资！\n",r);
    }
}

int delete(MYSQL mysql)
{
    char name[20];
    char sql[100];
    printf("请输入删除物资的名称:");
    scanf("%s",name);
    sprintf(sql,"DELETE FROM stuff WHERE name = \'%s\'",name);
    
    //执行SQL语句
    if(mysql_query(&mysql, sql))
    {
        //通常原因就是 SQL 语句语法错误、违背约束、没有权限、连接已断开等
        fprintf(stderr,"删除物资失败(原因：%s)\n",mysql_error(&mysql));
    }
    else
    {
        uint64_t r = mysql_affected_rows(&mysql); 
        if(r==0)
        {
            printf("删除物资失败,不存在此物资！\n");
        }
        else
        {
            printf("删除成功，共删除 %lu 类物资！\n",r);
        }
    }
}

int update(MYSQL mysql)
{
    char name[20],new[20];
    char sql[100];
    printf("请输入修改物资的姓名:");
    scanf("%s",name);
    printf("请输入新的名字");
    scanf("%s",new);
    sprintf(sql,"UPDATE stuff set name =\'%s\' WHERE name = \'%s\'",new,name);
    
    //执行SQL语句
    if(mysql_query(&mysql, sql))
    {
        //通常原因就是 SQL 语句语法错误、违背约束、没有权限、连接已断开等
        fprintf(stderr,"更改名称失败(原因：%s)\n",
        mysql_error(&mysql));
    }
    else
    {
        uint64_t r = mysql_affected_rows(&mysql); 
        if(r==0)
        {
            printf("修改名称失败，无此物资！\n");
        }
        else
        {
            printf("修改成功，共修改 %lu 类物资！\n",r);
        }
    }
}